<?php
/**
 * サイト利用登録バインダー
 */
require_once 'Storage/diskunit.php';
require_once 'Storage/binder.php';
require_once dirname(__FILE__) . '/Site.php';
require_once APPLICATION_PATH . '/controllers/SiteController.php';
require_once dirname(__FILE__) . '/jp.php';
/**
 * サイト利用登録バインダークラス
 * @link http://www.evernote.com/shard/s89/sh/e3eb1437-22b4-4285-977c-d612baea7087/02ca183b1352e0f6f935f15ca23a0433
 */
class Models_SiteRegistBinder extends Binder
{
	/** サイト利用登録用紙の束 */
	protected $_registPapers;
	/** 検索で絞り込んだサイト利用登録用紙の束 */
	protected $_selectedRegistPapers;
	/** 現在見ているサイト利用登録用紙 */
	protected $_currentRegistPaper;

	/**
	 * コンストラクタ
	 * バインダーからサイト利用登録用紙の束を取り出す
	 */
	public function __construct($updateFlg=FALSE)
	{
		$storage = new Storage_Diskunit(APPLICATION_NAME, SiteController::getSiteRegistBinderDir());
		parent::__construct(SiteController::BINDER_LABEL_REGIST, $storage, $updateFlg);
		$this->_registPapers = $this->get_pages();
//		$binder = new Binder(SiteController::BINDER_LABEL_REGIST, $storage, $updateFlg);
//		$this->_registPapers = $binder->get_pages();
	}
	/**
	 * メールアドレスが一致する申込用紙に絞り込む
	 * @param string $mailAddress メールアドレス
	 * @return integer 絞り込んだページ数
	 */
	public function selectAgreeMailAddressPaper($mailAddress)
	{
		$this->_selectedRegistPapers = array();
		/** 全件検索 */
		foreach ($this->_registPapers as $registPaper) {
			/** サイト利用登録用紙の時だけ絞り込み判定を行う */
			if ($registPaper instanceof Models_Site) {
				if ($registPaper->isYou(Models_site::メールアドレス, $mailAddress, Models_Site::完全一致)) {
					$this->_selectedRegistPapers[] = $registPaper;
				}
			}
		}
		$selectedCount = count($this->_selectedRegistPapers);
		if ($selectedCount > 0) {
			$this->_currentRegistPaper = $this->_selectedRegistPapers[0];
		}
		return $selectedCount;
	}
	/**
	 * UIDに一致する登録用紙を検索する
	 * @param unknown $uid
	 * @return number
	 */
	public function uid検索($uid)
	{
		$総ページ数 = 0;
		$this->_selectedRegistPapers = array();
		/** 全件検索 */
		foreach ($this->_registPapers as $registPaper) {
			/** サイト利用登録用紙の時だけ絞り込み判定を行う */
			if ($registPaper instanceof Models_Site) {
				if ($registPaper->isYou('_uid', $uid, Models_Site::SELECT_AGREE)) {
					$this->_selectedRegistPapers[] = $registPaper;
				}
			}
		}
		$総ページ数 = count($this->_selectedRegistPapers);
		if ($総ページ数 > 0) {
			$this->_currentRegistPaper = $this->_selectedRegistPapers[0];
		}
		return $総ページ数;
	}
	/**
	 * データを取り出す
	 * @param string $property
	 * 有効プロパティ
	 * jp::ユニークID
	 * jp::チーム名
	 * jp::メールアドレス
	 */
	public function getValue($property)
	{
		if (!($registPaper = $this->_currentRegistPaper)) {
			return NULL;
		}
		$registPaper instanceof  Models_Site;
		switch ($property) {
			case jp::ユニークID:
				$result = $registPaper->get_uid();
				break;
			case jp::チーム名:
				$result = $registPaper->get_teamname();
				break;
			case jp::メールアドレス:
				$result = $registPaper->get_mailaddress();
				break;
			default:
				$result = NULL;
		}
		return $result;
	}
	public function パスワード登録($パスワード)
	{
		if (!($registPaper = $this->_currentRegistPaper)) {
			return FALSE;
		}
		$registPaper instanceof  Models_Site;
		$registPaper->set_loginpassword($パスワード);
	}
}


/*******************************************************
 *                                    単体テストブロック
******************************************************/
/* ユニットテストブロック */
if (class_exists ( 'ユニットテストケース' )) {
	class Models_SiteRegistBinderTest extends ユニットテストケース {
		const 実在するUID = '54180dde2649e3.86177160';
		protected $テストするクラス名 = 'Models_SiteRegistBinder';
		/**
		 * getAgreeMailAddressPaperテスト０１
		 * 登録メールアドレスhariushi@minder.minibird.jpを設定した場合
		 * UIDに'53780c9b851208.74580417'が記載された登録用紙が返却されること
		 */
		public function test_getAgreeMailAddressPaper01()
		{
			$obj = new Models_SiteRegistBinder();
			$obj->selectAgreeMailAddressPaper('hariushi@minder.minibird.jp');
			$ret = $obj->getValue(jp::ユニークID);
			$this->assertEqual($ret, '53780c9b851208.74580417');
		}
		/**
		 * setValueテスト０１
		 *
		 */
		public function test_パスワード変更()
		{
			$obj = new Models_SiteRegistBinder();
			$this->テストクラスインスタンス = new Models_SiteRegistBinder();
			$this->テストクラスインスタンス->uid検索(self::実在するUID);
			$this->テストクラスインスタンス->パスワード登録('bbbbb');
			$ret = $this->getValue('_currentRegistPaper')->isYou('_loginPassword', 'bbbbb', object::SELECT_AGREE);
			$this->assertEqual($ret, TRUE);
		}
	}
}
